#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
MySQLPass 极简版打包脚本
将必要的Python文件打包成ZIP文件，便于用户下载使用
"""

import os
import sys
import zipfile
import shutil
from datetime import datetime

# 项目配置
BUILD_NAME = "MySQLPass"
BUILD_VERSION = "1.0.0"
OUTPUT_DIR = "dist_zip"
ZIP_FILENAME = f"{BUILD_NAME}-{BUILD_VERSION}-{datetime.now().strftime('%Y%m%d')}.zip"

# 需要打包的文件和目录列表
FILES_TO_PACK = [
    "main.py",
    "requirements.txt",
    "src/",  # 包含所有源代码
    "README"
]


def clean_build():
    """清理构建目录"""
    print("清理构建目录...")
    if os.path.exists(OUTPUT_DIR):
        shutil.rmtree(OUTPUT_DIR)


def create_readme():
    """创建使用说明文件"""
    readme_content = """MySQLPass 使用说明

这是一个自由使用的MySQL工具，可以帮助您管理MySQL连接和密码。

使用方法：
1. 确保已安装Python 3.6或更高版本
2. 安装依赖包：pip install -r requirements.txt
3. 运行程序：python main.py

命令行使用：
- 查看帮助：python main.py --help
- 启动图形界面：python main.py --gui
- 命令行模式：python main.py [command] [options]

支持的命令：
- add: 添加新的MySQL连接
- get: 获取MySQL连接信息
- list: 列出所有已保存的连接
- delete: 删除MySQL连接

示例：
python main.py list
python main.py add --name mydb --host localhost --port 3306 --user root --password secret

注意事项：
- src/data/mp.png 已作为应用程序图标使用
"""
    
    if not os.path.exists("README"):
        with open("README", "w", encoding="utf-8") as f:
            f.write(readme_content)


def create_zip():
    """创建ZIP压缩包"""
    print(f"开始创建ZIP压缩包: {ZIP_FILENAME}")
    
    # 创建输出目录
    if not os.path.exists(OUTPUT_DIR):
        os.makedirs(OUTPUT_DIR)
    
    # 构建ZIP文件路径
    zip_path = os.path.join(OUTPUT_DIR, ZIP_FILENAME)
    
    # 创建ZIP文件
    with zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED) as zipf:
        for item in FILES_TO_PACK:
            if os.path.isfile(item):
                # 添加文件
                zipf.write(item, os.path.basename(item))
                print(f"已添加文件: {item}")
            elif os.path.isdir(item):
                # 添加目录及其内容
                for root, dirs, files in os.walk(item):
                    for file in files:
                        file_path = os.path.join(root, file)
                        arcname = os.path.relpath(file_path)
                        zipf.write(file_path, arcname)
                        print(f"已添加文件: {file_path}")
    
    print(f"ZIP压缩包已创建: {zip_path}")
    return zip_path


def main():
    """主函数"""
    try:
        # 1. 清理构建目录
        clean_build()
        
        # 2. 创建README文件（如果不存在）
        create_readme()
        
        # 3. 创建ZIP压缩包
        zip_path = create_zip()
        
        print("\n打包完成！")
        print(f"ZIP压缩包位置: {os.path.abspath(zip_path)}")
        print("使用说明:")
        print("1. 下载ZIP文件并解压")
        print("2. 安装依赖: pip install -r requirements.txt")
        print("3. 运行程序: python main.py")
        
    except Exception as e:
        print(f"打包过程中出现错误: {str(e)}")
        sys.exit(1)


if __name__ == "__main__":
    main()